智能车制作

标题: 飞思卡尔那些事之PWM控制直流电机 收藏 [打印本页]

作者: nangongwangyong    时间: 2010-7-11 17:10
标题: 飞思卡尔那些事之PWM控制直流电机 收藏
飞思卡尔那些事之PWM控制直流电机 收藏
资源:
1、直流电机。当直流电机的接线端电压不同时,会出现正转或反转的状态。如接线柱A和B,当A为高电平,B为低电平时,电机正转;当A为低电平,B为高电平时,电机反转。在电机允许电压范围内,电压越高,输出功率越大,转速越快,反之,输出功率越小,转速越慢。
2、HCS12的PWM输出。通过PWM输出,可以在标准的TTL电平中,输出不同的电压。以控制电机的转速和转动方向。
3、33886。电机驱动芯片,内部集成半H桥。可以通过TTL电平控制V+电平输出。最高频达10KHz。电压范围为0到40V。最大电流为5A。可以工作在-60到125摄氏度的环境下。

方案:
1、HCS12中的PWM模块,通过硬件进行PWM输出。
2、HCS12中的ECT的比较输出模块,通过比较输出进行PWM的输出。
鉴于PWM模块为输出PWM专用模块,通过设置相应寄存器即可实现PWM输出,简单方便,而且精确。故选用PWM模块进行PWM输出。

说明:
1、驱动芯片为33886。
2、16位PWM控制。
3、周期为1MS即输出1KHZ。
4、对齐方式为PWM左对齐方式。
5、输出极性为起始高电平。
6、占空比为0%~100%,在这期间分为10个档。通过按键进行变换,每按下一个按键,占空比提高一档。
7、通过级联方式实现16位PWM输出。
8、通过级联方式实现16位PWM输出。通道PWM01组成通道A;通道PWM23组成通道B;
9、时钟源选择。
  BusBlock:8MHz。
  PWM输出频率:1KHz。
  预分频:16分频    500kHz
   PWMPRCLK=0x66
  分频:50分频 10K
   ClockSX=ClockX/(2*PWMSCLX)
   PWMSCLx=ClockX/ClockSX*2=500k/(10k*2)=25=0x19
  通过两次分频可得通道时钟周期为:100US即10HZ
  通道A时钟频率选择PWMPRCLK和PWMSCLA;
  通道B时钟频率选择PWMPRCLK和PWMSCLB;
  周期计算公式:
   左对齐方式:
    输出周期=通道时钟周期*(PWMPERx+1)
    PWMPERx=输出周期/通道时钟周期-1
     =1MS/10US-1
     =9=0X09
10、占空比设置:
  左对齐起始输出高电平:
   占空比=[(PWMDTYx+1)/(PWMPERx+1)]*100%
   PWMDTYx=占空比*(PWMPERx+1)/100%
   00%WMDTYx=0x00
   10%:PWMDTYx=0x01
   20%:PWMDTYx=0x02
   30%:PWMDTYx=0x03
   40%:PWMDTYx=0x04
   50%:PWMDTYx=0x05
   60%:PWMDTYx=0x06
   70%:PWMDTYx=0x07
   80%:PWMDTYx=0x08
   90%:PWMDTYx=0x09
   99%:PWMDTYx=0x0A

CODE:
#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
//===========================================================//
//PWM输出,控制直流电机转动方向已经转速
//author: Yangtze
//time:2009/4/17/2:15:45
//===========================================================//
unsigned char Ton[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x08,} ;
unsigned int Tperiod=0x09;
void main(void)
{
  PWME=0x00;
  PWMPRCLK=0x66;    //通道时钟预分频, 16分频
  PWMSCLA=0x19;     //时钟A分频 ,  50分频
  PWMSCLB=0x19;     //时钟B分频 ,  50分频
  
  PWMCLK=0x0F;  //PCLK1选择ClockSA,PCLK选择ClockSB
  
  PWMPOL=0x0F;  //起始输出高电平
  PWMCAE=0x00;  //PWM输出左对齐
  PWMCTL=0x3C;  //通8道01级联,通道23级联
  
  PWMPER0=0x00; //级联通道01的周期高字节
  PWMPER1=0x09; //级联通道01的周期低字节
  PWMPER0=0x00; //级联通道23的周期高字节
  PWMPER3=0x09; //级联通道23的周期低字节
  
  PWMDTY0=0x00; //级联通道01的占空比高字节
  PWMDTY1=Ton[8]; //级联通道01的占空比低字节
  PWMDTY2=0x00; //级联通道01的占空比高字节
  PWMDTY3=Ton[0]; //级联通道01的占空比低字节
  PWME=0x0F;
  for(;;);
}

        //后记:
        //以上程序中,因为输出频率不是很高,故8位PWM输出已经够用,上述程序设置通道级联完全是多次一举。
        //在选择级联与否时,一定要具体问题具体分析,不能想当然的使用,否则又可能会造成资源浪费。
        //上述程序中,没有对HCS12进行PLL分频,使得HCS12的BusClock很长,在一定程度上造成了资源浪费。
        //在最后运行过程中,出现了一点小问题,就是,PWM输出周期并补时计划中的1MS,而是3.5MS。示波器应该没有问题,估计是在计算周期的过程中出错,影响了结果输出。
        //朋友,如果和我一样,对单片机感兴趣的话,和我一块检查一下错误的原因吧。看看谁检查到的原因时正确的。嘿嘿。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yangyong1011/archive/2009/04/29/4136206.aspx
作者: 天涯客    时间: 2010-10-20 20:46
谢谢了
作者: witbas    时间: 2010-11-11 17:05
谢啦!
作者: witbas    时间: 2010-11-11 17:05
谢啦!
作者: husthjp    时间: 2010-11-11 21:26
谢了
作者: 李子yue    时间: 2010-12-11 10:34
楼上的你太帅了
作者: wp1989    时间: 2010-12-31 17:34
楼上的程序是不是有错误啊
PWME=0x00;
  PWMPRCLK=0x66;    //通道时钟预分频, 16分频
预分频应该是 64分频吧??
作者: linyujin    时间: 2011-2-16 20:18
学习了,楼主1
作者: turf456    时间: 2011-2-16 21:27

作者: mingfengzhige    时间: 2011-2-20 20:23
谢了,还有很多要学啊
作者: Mr__Xiao    时间: 2011-2-20 20:41
受教了!
作者: kui13575728208    时间: 2011-2-24 10:29
看看
作者: zhubinorange    时间: 2011-2-24 15:39
不知道是不是我错了,我记得好像左对齐的占空比=[(PWMPERx-PWMDTYx)/PWMPERx]*100%
作者: zhubinorange    时间: 2011-2-24 17:26
请问“通过按键进行变换”的程序是哪部分啊?
作者: 120730409    时间: 2011-3-5 21:36
xie
作者: 范小川    时间: 2011-3-18 21:13
需要设置翻转模式和对齐方式才能确定占空比的设置方式的嘛
作者: s614857575    时间: 2011-3-21 22:08
啊,纠结啊
作者: 低调    时间: 2011-3-25 17:01
我是菜鸟,我看看,不说话。
作者: suaibinhan    时间: 2011-3-26 20:14
谢谢了哈!
作者: suaibinhan    时间: 2011-3-26 20:14
谢谢了
作者: pangyuo    时间: 2011-3-27 20:56
感谢中……
作者: wanbei    时间: 2011-3-28 15:54
学习了
作者: wanbei    时间: 2011-3-28 17:06
学习了
作者: 二姐头    时间: 2011-4-8 16:14
写的很详细,不知能不能看的懂了哈!
作者: liubingzsd    时间: 2011-4-8 21:33
谢谢了
作者: liubingzsd    时间: 2011-4-8 21:33
谢谢了
作者: liubingzsd    时间: 2011-4-8 21:34
谢谢了
作者: nevergiveup.p    时间: 2011-4-13 22:18

作者: 依赖饼干    时间: 2011-4-22 20:39
GOOD~~~~~~
作者: hello1043    时间: 2011-4-28 21:50
受用 楼主好人
作者: 小刀    时间: 2011-4-29 18:47
7楼是对的
作者: 386656175    时间: 2011-5-1 13:30
谢谢楼主
作者: wys839348916    时间: 2011-6-6 09:22
学习了
作者: spencer911    时间: 2012-2-18 12:35
mark
作者: 林牛牛    时间: 2012-3-12 21:17
随便看了一下,留下印记,下次好方便再看
作者: BOZHIFU    时间: 2012-4-1 00:33
收了、
作者: dongpinbo    时间: 2012-4-1 19:19
我来看看
作者: 林牛牛    时间: 2012-4-29 13:28
好的

作者: 799381008    时间: 2012-4-30 18:48
好贴!
作者: 封号式寂寞    时间: 2012-5-22 20:59

作者: wsdyi100    时间: 2012-11-14 22:38
不错 厉害
作者: jone-mike    时间: 2012-11-24 23:02
学习了!谢谢!!!
作者: wuchao0508    时间: 2012-11-25 11:31

作者: 早安,徐威    时间: 2012-11-27 21:44
楼主我想问下具体的转速 pWM输出的 有具体的数值和占空比么?
作者: 早安,徐威    时间: 2012-11-27 21:44
顺路顶一下
作者: 夏夜之星    时间: 2012-11-30 16:53
谢谢哈

作者: zanran8    时间: 2013-3-2 09:09

作者: zhangguanghui    时间: 2013-3-3 17:03
学习中。。。。。。。
作者: dlyt03    时间: 2013-3-4 20:33

作者: 王彦杰    时间: 2013-3-5 13:16

作者: a623099011    时间: 2013-3-5 18:14
:lol:lol:lol学把
作者: 林先贵    时间: 2013-3-26 21:14

作者: 一个好青年    时间: 2013-5-20 23:58

作者: 中华旺仔    时间: 2013-11-22 19:22

作者: mengyu139    时间: 2013-11-24 15:38
收藏了
作者: lanyu4577    时间: 2014-2-20 20:57
感谢楼主分享!
作者: wangsf94    时间: 2015-5-10 08:37
谢谢楼主:lol:lol:lol
作者: 18337118925    时间: 2015-5-22 11:12
谢谢分享,很不粗的资料




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2