- 1、本文档共54页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
电动自行车驱动控制系统
TOC \o 1-4 \h \u 目 录
#includetimer.h
#includePWM.h
unsigned char PWM0_TEMP= 128; //占空比设置,赋初值0x80 50%占空比
unsigned char duty_cycle;
unsigned char KEY1_F,KEY2_F,KEY3_F,KEY4_F; //按键标志位
unsigned char START_F = 0; //设置完成,启动标志位
void Motor_Ctr_Int(void)
{
DIR = 0; //初始化方向 设IR=1正 DIR=0反
PWM_DIS; //初始化时不输出PWM
}
void PID_Adjust(void) //PWM调节函数
{
if(START_F==1)
{
PWM_DAC(PWM0_TEMP); //更新PWM参数,改变输出占空比
duty_cycle=PWM0_TEMP*100/255; //占空比计算
}
}
void Key(void)
{
static unsigned int key1_cnt,key2_cnt,key3_cnt,key4_cnt; //按键有效计数
if( KEY1 == 0 )
{
++key1_cnt; //按键去抖
if( key1_cnt == 5 )
{
KEY1_F = 1;
}
}
else key1_cnt= 0;
if( KEY2 == 0 )
{
++key2_cnt;
if( key2_cnt == 5 )
{
KEY2_F = 1;
}
}
else key2_cnt= 0;
if( KEY3 == 0 )
{
++key3_cnt;
if( key3_cnt == 5 )
{
KEY3_F = 1;
}
}
else key3_cnt= 0;
if( KEY4 == 0 )
{
++key4_cnt;
if( key4_cnt == 5 )
{
KEY4_F = 1;
}
}
else key4_cnt= 0;
}
void Key_symbol_process(void)
{
static unsigned char key4_flag; //按键状态标志
if( KEY1_F )
{
KEY1_F = 0;
PWM0_TEMP++; //加速
}
if( KEY2_F )
{
KEY2_F = 0;
PWM0_TEMP--; //减速
}
if( KEY3_F )
{
KEY3_F = 0;
DIR=~DIR; //方向切换
}
if( KEY4_F )
{
KEY4_F = 0;
key4_flag++; //通过标志位,设置个十百千设置
if(key4_flag==1) //KEY4-P3^5-ET1按第1次
{
PWM_EN; // 启动
START_F = 1;
}
if(key4_flag==2) //KEY4-P3^5-ET1按第2次
{
START_F = 0;
MOTOR_STOP; //快速制动
key4_flag = 0;
}
}
}
4.2 PWM调速与测速程序设计
4.2.1 PCA捕获模式
STC12C5A60S2D系列单片机中的PCA可编程计数器阵列含有一个特殊的16位定时器,它可与2个16位捕获/比较模块相连。每个模块可编程工作在4种模式下,即:上升/下降沿捕获、软件定时器、高速输出或可调制脉冲输出。设计时,可将模块0连接到P3.7(CEX0/PCA0/PWM0),模块1连接到P3.5(CEX1/PCA1/PWM1)。由于寄存器CH和CL的内容是正在自由递增计数的16位PCA定时器的值,因此,PCA定时器可作为2个模块的公共时间基准,并可通过编程工作在1/12振荡频率、1/2振荡频率、定时器0溢出或ECI脚的输入(P3.4)。定时器的计数源由CMOD?SFR的CPS1和CPS0位来确定。?
??要使PCA模块工作在图4-2所示的捕获模式,寄存器CCAPMn中的CAPNn和CAPPn至少应有一位必须置1。对模块的外部CEXn输入(包括CEX0/P3.7、CEX1/P3.5、CEX2/P2.0、CEX3/P2.4口)的跳变进行采样时,若采样到有效跳变,其P
文档评论(0)