OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6254|回复: 12

定时器加3-8译码器,模拟8路PWM输出后四路波形左右漂移

[复制链接]

19

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-11-24
在线时间
8 小时
发表于 2014-4-12 16:30:55 | 显示全部楼层 |阅读模式



这是真值表和接法,很简单,A0~2分别接PB8~10
主要想实现的功能就是利用单片机的一个定时器和3个引脚,产生8路的脉宽1.5ms周期20ms的PWM。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-11-24
在线时间
8 小时
 楼主| 发表于 2014-4-12 16:37:15 | 显示全部楼层
#define M0_Y0 {PBout(8)=0; Bout(9)=0; Bout(10)=0;}
#define M0_Y1 {PBout(8)=1; Bout(9)=0; Bout(10)=0;}
#define M0_Y2 {PBout(8)=0; Bout(9)=1; Bout(10)=0;}
#define M0_Y3 {PBout(8)=1; Bout(9)=1; Bout(10)=0;}
#define M0_Y4 {PBout(8)=0; Bout(9)=0; Bout(10)=1;}
#define M0_Y5 {PBout(8)=1; PBout(9)=0; PBout(10)=1;}
#define M0_Y6 {PBout(8)=0; PBout(9)=1; PBout(10)=1;}
#define M0_Y7 {PBout(8)=1; PBout(9)=1; PBout(10)=1;}

u8 num[3];
u8 width[3];

u8 M0[7]={15,15,15,15,15,15,15};
u8 M1[7]={15,15,15,15,15,15,15};
u8 M2[7]={15,15,15,15,15,15,15};


void TIM3_IRQHandler(void)
{              
if(TIM3->SR&0X0001)//溢出中断
{
width[0]=num[0]%25;
num[0]++;
switch(num[0]/25)
{
case 0:
if(width[0]<M0[0])
M0_Y0    
else
M0_Y7
break;

case 1:
if(width[0]><M0[1])
M0_Y1    
else
M0_Y7   
break;

case 2:
if(width[0]><M0[2])
M0_Y2    
else
M0_Y7    
break;

case 3:
if(width[0]><M0[3])
M0_Y3    
else
M0_Y7    
break;

case 4:
if(width[0]><M0[4])
M0_Y4  
else
M0_Y7  
break;

case 5:
if(width[0]><M0[5])
M0_Y5    
else
M0_Y7
break;

case 6:
if(width[0]><M0[6])
M0_Y6    
else
M0_Y7    
break;

default:
                                        M0_Y7
  if(num[0]>=200)
 num[0]=0;
 break;
 }                    
}    
TIM3->SR&=~(1<<0);//清除中断标志位      
}
//通用定时器中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void Timer3_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1;//TIM3时钟使能    
  TIM3->ARR=arr;  //设定计数器自动重装值//刚好1ms    
TIM3->PSC=psc;  //预分频器7200,得到10Khz的计数时钟
//这两个东东要同时设置才可以使用中断
TIM3->DIER|=1<<0;   //允许更新中断
// TIM3->DIER|=1<<6;   //允许触发中断    
TIM3->CR1|=0x01;    //使能定时器3
   MY_NVIC_Init(1,3,TIM3_IRQChannel,2);//抢占1,子优先级3,组2  
}





Timer3_Init(9,719);//100Khz的计数频率,计数到10为100us

定时器是100us进一次中断
虽然这个电路能产生8路PWM  但是楼主只要7路就够用  所以,上面的程序我把接通第八路当做其他路的低电平用了,没用74HC238D的E1,E2,E3来控制低电平。
回复 支持 反对

使用道具 举报

19

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-11-24
在线时间
8 小时
 楼主| 发表于 2014-4-12 16:41:58 | 显示全部楼层
case 1:
if(width[0]<M0[1])!!!!!!!!!!全是><。不知道为什么粘贴到网页上变成><
M0_Y1    
else
M0_Y7   
break; 
在KEIL的仿真上,波形很正常的,下载到板子上,用示波器测得前三路稳定正常,后四路波形左右漂移。插上要控制的元件之后,也是前三路的元件正常,后四路的不正常。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-12 19:43:55 | 显示全部楼层
楼主B8,B9,B10的电平&信号  正常么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

19

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-11-24
在线时间
8 小时
 楼主| 发表于 2014-4-12 23:02:20 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,晚上去自习了,考研党哎。明天早上去实验室测一下。我还真没想到要测一下单片机的管脚    只顾着测译码器了
回复 支持 反对

使用道具 举报

19

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-11-24
在线时间
8 小时
 楼主| 发表于 2014-4-13 12:13:45 | 显示全部楼层


这是在KEIL上仿真出的波形,用示波器直接量P8~10管脚时,只有P8是稳定的,P9,P10都会左右漂移。而量译码器的管脚时,只有Y0和Y2是稳定的,插上舵机控制没问题。Y1也稳定,但是好像固定偏移了一个位置,插上舵机之后也不好使。Y3~6严重左右漂移,插上舵机后,舵机颤动。
回复 支持 反对

使用道具 举报

19

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-11-24
在线时间
8 小时
 楼主| 发表于 2014-4-13 12:35:04 | 显示全部楼层
这个是P8的波形


这个是P9的波形,这个好像不大正常,不知道为什么高低同时存在。。


这个是P10的,貌似还可以


这个是译码器Y0的。这个很正常,插上舵机控制也很好。


想拍一个Y3~6漂移的图,不知道咋回事,今天的示波器居然不漂移了,波形看起来跟Y0差不多,但就是插上舵机不好使啊。

回复 支持 反对

使用道具 举报

19

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-11-24
在线时间
8 小时
 楼主| 发表于 2014-4-13 12:36:53 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,波形图我都发在楼上了 ,帮忙分析一下啊。。。
回复 支持 反对

使用道具 举报

19

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-11-24
在线时间
8 小时
 楼主| 发表于 2014-4-13 12:47:08 | 显示全部楼层
又新拍了三张,同时拍的。
                                                                                                                          PB8



                                                                                                                 PB9

                                                                                                                          PB10

后两个明显能看到上面的虚框。。。难道是我示波器没有调好???貌似按一下自动调整就好了,但是我还是纳闷,不管按什么顺序测,PB8始终是稳定的,但是那两个时不时的都会漂。


回复 支持 反对

使用道具 举报

19

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-11-24
在线时间
8 小时
 楼主| 发表于 2014-4-13 12:49:19 | 显示全部楼层
附上原理图


回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-13 14:17:54 | 显示全部楼层
回复【10楼】we-are:
---------------------------------
输入信号的原始波形都在漂移,这个问题你得先解决。
3个都输出固定频率的PWM,测试下看看吧。
可能和你电路有关了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

19

主题

93

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2013-11-24
在线时间
8 小时
 楼主| 发表于 2014-4-13 15:33:50 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
原子哥,我发现了个问题,单片机的端口只能发那种一个周期内只有一个脉宽的PWM。像是这种的
while(1)
{
             BOut(8)=1;
             delay_us(2000);
             BOut(8)=0;
             delay_us(3000);
}

如果发一个周期内不止一个脉宽的就不行了,比如这种

while(1)
{
                BOut(8)=1;
                delay_us(1500);
                BOut(8)=0;
                delay_us(1500);
                BOut(8)=1;
                delay_us(3000);
                BOut(8)=0;
                delay_us(3000);
                BOut(8)=1;
                delay_us(2000);
                BOut(8)=0;
delay_us(2000);
}


上面那种很稳定,下面那种漂移相当厉害
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-4-13 21:09:39 | 显示全部楼层
回复【12楼】we-are:
---------------------------------
不至于吧
这两种应该都可以出很好的波形
只是你这个波形频率在变。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-12 14:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表