打印
[C语言]

MBI5043输出抖动,求建议或驱动代码

[复制链接]
3243|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
@若水|  楼主 | 2017-10-26 14:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 21ic小管家 于 2017-10-27 14:39 编辑

MCU:STM8S00F3
产生PWM的芯片:MBI5043



下面是驱动代码:

void send_one_data(unsigned char c_ch,unsigned int i_data)
{
        unsigned char i;

        for(i=0;i<15;i++)
        {
                if(i_data&0x8000)
                {
                        SDI_ON();//输出1bit 1
                }
                else
                {
                        SDI_OFF();//输出1bit 0
                }
                CLK_ONOFF();
                i_data=i_data<<1;
        }
        if(c_ch==0)
                LE1_ON();
        else
                LE2_ON();
        if(i_data&0x8000)
        {
                SDI_ON();//输出1bit 1
        }
        else
        {
                SDI_OFF();//输出1bit 0
        }
        CLK_ONOFF();

        if(c_ch==0)
                LE1_OFF();
        else
                LE2_OFF();
}

/******************************************************************************
功能说明:        整体锁栓
输入参数:        无
输出参数:        无
返回值:        无
******************************************************************************/
void lock_data(void)
{
        unsigned char i;

        for(i=0;i<13;i++)
        {
                SDI_OFF();//输出1bit 0
                CLK_ONOFF();
        }
        TIM1_CR1   &= ~(0x01);
        LE1_ON();
        LE2_ON();
        for(i=13;i<16;i++)
        {
                SDI_OFF();//输出1bit 0
                CLK_ONOFF();
        }
        LE1_OFF();
        LE2_OFF();

        _asm("nop");
        _asm("nop");
        
        TIM1_CR1   |= 0x01;
}


下面是测试代码:

void main()
{
        unsigned char i = 0;
        MBI5043init();

        while(1)
        {
                for(i=0;i<16;i++)
                {
                        send_one_data(1,32768);//50%的占空比
                }
                lock_data();
        }
}

按以上的方式测试,输出会抖动

void main()
{
        unsigned char i = 0;
        MBI5043init();
        for(i=0;i<16;i++)
        {
                send_one_data(1,32768);//50%的占空比
        }
        lock_data();
        
        while(1)
        {
               
        }
}

这样输出就不会抖动,所以问题是出在驱动代码中,求大神指教


相关帖子

沙发
@若水|  楼主 | 2017-10-26 14:31 | 只看该作者
@21ic小管家 背景怎么会变成这样的?

使用特权

评论回复
评论
21ic小管家 2017-10-27 14:40 回复TA
因为你添加了背景色~~~~ 
板凳
qq261335460| | 2017-10-26 14:42 | 只看该作者
我也挺好奇。

使用特权

评论回复
地板
xyz549040622| | 2017-10-26 14:51 | 只看该作者
大概看了看,时序是很简单的,着重检查硬件的问题。输出有抖动是指什么呢?

使用特权

评论回复
5
@若水|  楼主 | 2017-10-27 08:32 | 只看该作者
xyz549040622 发表于 2017-10-26 14:51
大概看了看,时序是很简单的,着重检查硬件的问题。输出有抖动是指什么呢? ...

用示波器会看到波形抖动,就输出端的波形,电脑上传不了图片,没办法给你看

使用特权

评论回复
6
l836455032| | 2017-11-8 12:40 | 只看该作者
我也在调试mbi5043,都好几天了,驱动还是没有调通。我看手册的时序不是太清楚。5043是CLK上升沿加载数据还是下降沿加载。就是没有波形呢

使用特权

评论回复
7
Jacobli| | 2019-7-23 22:19 | 只看该作者
最近也是在调试MBI5043,时序照着手册写的,但就是没有信号输出,楼主能发我一份驱动代码学习一下么

使用特权

评论回复
8
hu459846936| | 2020-1-1 20:18 | 只看该作者
请问大佬调出来了吗??我最近在弄5153.数据手册都没个完整的时序图。看来这个系列的时序是一样的。我现在还没调通。芯片没输出。

使用特权

评论回复
9
hu459846936| | 2020-1-1 20:23 | 只看该作者
本帖最后由 hu459846936 于 2020-1-1 20:32 编辑

关于楼主的抖动问题,确实是软件的原因。第一种方式,会重复像IC写入数据。也就是说会一直刷新数据。所以有抖动。第二种方式不会,因为只写了一次数据。后面的就循环在WHILE(1)里面了。 MBI5043init();楼主能发下这个的内容吗?MBI5043需不需要初始化?

使用特权

评论回复
10
535438616| | 2020-4-14 16:03 | 只看该作者
hu459846936 发表于 2020-1-1 20:23
关于楼主的抖动问题,确实是软件的原因。第一种方式,会重复像IC写入数据。也就是说会一直刷新数据。所以有 ...

我有调好的驱动联系QQ535438616

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

2686

帖子

6

粉丝