直流电机PWM调速测试程序

  • 格式:doc
  • 大小:26.00 KB
  • 文档页数:2

*程序思路说明:(我只是给您一种思路,而不是告诉您关于您手上的车,或者其他用L298N 控制的相关实现程序,求知是个过程,祝您在这个过程中收获一些属于自己的东西,祝您使用愉快) *
* * *关于频率和占空比的确定,对于12M晶振,假定PWM输出频率为1KHZ,这样定时中断次数*
*设定为C=10,即0.01MS中断一次,则TH0=FF,TL0=F6;由于设定中断时间为0.01ms,这样*
*可以设定占空比可从1-100变化。

即0.01ms*100=1ms * ******************************************************************************/
#include <REGX51.H>
/*****************************************************************************
* TH0和TL0是计数器0的高8位和低8位计数器,计算办法:TL0=(65536-C)%256;
*
* TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器*
* 工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时* * 间为1ms*65536=65.536ms
* P1_0、P1_1为输入逻辑信号控制端,控制电机Motor 1;
******************************************************************************/
#define V_TH0 0XFF
#define V_TL0 0XF6
#define V_TMOD 0X01
void init_sys(void); /*系统初始化函数*/
unsigned char ZKB1; /*占空比变量*/
void main (void)
{
init_sys();
ZKB1=40; /*占空比初始值设定*/
P1_1=1;P1_0=0;
while(1);
}
/******************************************************
*函数功能:对系统进行初始化,包括定时器初始化和变量初始化*/
void init_sys(void) /*系统初始化函数*/
{
/*定时器初始化*/
TMOD=V_TMOD;
TH0=V_TH0;
TL0=V_TL0;
TR0=1;
ET0=1;
EA="1";
}
/*中断函数*/
void timer0(void) interrupt 1
{
Unsigned char click;
TH0=V_TH0; /*恢复定时器初始值*/
TL0=V_TL0;
++click;
if (click>=100) click=0;
if (click<=ZKB1) /*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/
P1_1=0;
else
P1_1=1;
}。