汽配软件使用帮助
汽修软件使用帮助
汽配号:
密码:
忘记密码
免费注册
汽车配件城市联盟
新闻投稿
汽车配件110网
资讯中心
国际
国内
企业
地方
电动车
行业快报
展会
统计
研究
政策
特种车
汽配黄页
电动车
摩托车
重型车配件
加盟商家
拆车件
农用车
轴承
物流
配件搜索
品牌专区
汽车用品
汽配批发
汽配供求
车主投诉
汽修百科
电动车
汽车改装
保养
用车养车
摩托车
汽车装饰
视频
QQ群
汽配城
当前位置:
汽车配件110网
>>
汽修百科
>>
电动车维修
>> PIC单片机控制的电动自行车驱动系统C程序
PIC单片机控制的电动自行车驱动系统C程序
www.qp110.com
来源:
电动车商情网 电动车商情网
作者:
侠名
类别:
电动车维修
时间:
2008-2-26
PIC
单片机控制的电动自行车驱动系统
C
程序
.46.
#include <pic.h>
//
电动车
双闭环程序,采用双闭环方式控制
电机
,以得到最好的zh 转速性能,并且可以
//限制
电机
的最大电流。本应用程序用到两个CCP 部件,其中CCP1 用于PWM 输出,以控
//制电机电压;CCP2 用于触发AD,定时器TMR2、TMR1,INT 中断,RB 口电平变化中断,
//看门狗以及6 个通用I/O 口
#define AND 0xe0 //状态采集5,6,7 位
#define CURA 0X0a //电流环比例和积分系数之和
#define CURB 0X09 //电流环比例系数
#define THL 0X6400 //电流环最大输出
#define FULLDUTY 0X0FF //占空比为1 时的高电平时间
#define SPEA 0X1d //转速环比例和积分系数之和
#define SPEB 0X1c //转速环比例系数
#define GCURHILO 0X0330 //转速环最大输出
#define GCURH 0X33 //最大给定电流
#define GSPEH 0X67 //最大转速给定
#define TSON 0X38 //手柄开启电压1.1 V,TSON*2 为刹车后手柄开启电压,即
//2.2 V
#define VOLON 0X4c //低电压保护重开电压3.0 V 即33 V
#define VOLOFF 0X49 //低电压保护关断电压2.86 V 即31.5 V
volatile unsigned char DELAYH,DELAYL,oldstate,speed,
speedcount,tsh,count_ts,count_vol,gcur,currenth,
voltage; //寄存器定义
static bit sp1,spe,ts,volflag,spepid,lowpower,
off,shutdown,curpid; //标志位定义
static volatile unsigned char new[10]={0xaf,0xbe,0xff,0x7e,0xcf,
0xff,0xd7,0x77,0xff,0xff}; //状态寄存器表
//------------PIC16F877 初始化子程序------------
void INIT877()
{
PORTC=0X0FF; //关断所有MOSFET
TRISC=0X02; //设置C 口输出
PIE1=0X00; //中断寄存器初始化,关断所有中断
TRISA=0XCF; //设置RA4,RA5 输出
TRISB=0XEF; //RB 口高三位输入,采集电机三相的霍尔信号
PORTC=new[(PORTB&AND)>>5]; //采集第一次霍尔信号,并输出相应的信号,导通
//两个MOS 管
T2CON=0X01; //TMR2 4 分频
CCPR1L=0X0FF; //初始时PWM 输出全高
CCP1CON=0X0FF; //CCP1 设置为PWM 方式
CCP2CON=0X0B; //CCP2 设置为特殊方式,以触发AD
ADCON0=0X81; //AD 时钟为32 分频,且AD 使能,选择AN0 通道采集手
//柄电压
TMR2=0X00; //TMR2 寄存器初始化
TMR1H=0X00; //TMR1 寄存器初始化
TMR1L=0X00;
T1CON=0X00; //TMR1 为1 分频
CCPR2H=0X08;
CCPR2L=0X00; //电流采样周期设置为TAD=512 μs
PR2=0XC7; //PWM 频率设置为5 kHz
ADCON1=0X02; //AD 结果左移
OPTION=0XFB; //INT 上升沿触发
TMR2ON=1; //PWM 开始工作
INTCON=0XD8; //中断设置GIE=1,PEIE=1,RBIE=1
ADIE=1; //AD中断使能
speedcount=0x00; //转速计数寄存器
speed=0x7f; //转速保持寄存器
spe=1; //低速标志位
sp1=1; //低速标志位
oldstate=0x0ff; //初始状态设置,区别于其他状态
count_ts=0x08; //电流采样8 次,采集1 次手柄
count_vol=0x00; //采样256 次手柄,采集1 次电池电压
ts=1; //可以采集手柄值的标志位
ADGO=1; //AD采样使能
TMR1ON=1; //CCP2 部件开始工作
}
//------------延时子程序---------------
#pragma interrupt_level 1
void DELAY1(x)
char x;
{
DELAYH=x; //延时参数设置
#asm
DELAY2 MOVLW 0X06
MOVWF _DELAYL
DELAY1 DECFSZ _DELAYL
GOTO DELAY1
DECFSZ _DELAYH
GOTO DELAY2
#endasm
}
//-----------状态采集子程序----------------------
void sample()
{
char state1,state2,state3,x;
do {
x=1;
state1=(PORTB&AND); //霍尔信号采集
DELAY1(x);
state2=(PORTB&AND);
}while(state1-state2); //当三次采样结果不相同时继续采集状态
if(state1-oldstate!=0) //看本次采样结果是否与上次相同,不同
//则执行
{oldstate=state1; //将本次状态设置为旧状态
state1=(oldstate>>5);
PORTC=new[state1]; //C 口输出相应的信号触发两个MOS 管
if(sp1==1){spe=1;sp1=0;}
else { //如果转速很低,则spe 置1
spe=0;sp1=0;
speedcount<<=1;
state3=(TMR1H>>2); //否则,spe=0,计转速
speed=speedcount+state3; //speed 寄存器为每256 μs 加1
}
speedcount=0;
}
}
//-----------------AD 采样子程序----------------------
void AD()
{
char x;
ADIF=0; //清AD 中断标志位
if(ts==1){ //如果为手柄采样,则采样手柄值
CHS0=1; //选择电流采样通道
count_vol=count_vol+1; //电池采样计数寄存器
spepid=1; //置转速闭环运算标志
ts=0;tsh=ADRESH; //存手柄值
if(count_vol==0) { //如果电池采样时间到,则选择AN2 通道,采集电池电压
CHS0=0;CHS1=1;volflag=1;x=1;DELAY1(x);ADGO=1;
}
}
else if(volflag==1) { //电池采样完毕,进行相应的处理
CHS1=0;CHS0=1;volflag=0;voltage=ADRESH;lowpower=1;
}
else { //否则,中断为采样电流中断
speedcount=speedcount+1; //speedcount 寄存器加1,作为测量转速用
if(speedcount>0x3d) sp1=1; //如果转速低于1 000 000 μs/(512 μs*3eh*3)
// 则认为为低速状态
currenth=ADRESH;
curpid=1;
count_ts=count_ts-1;
if(count_ts==0) { //如果手柄时间到,则转入手柄采样通道
CHS0=0;count_ts=0x08;ts=1;x=1;DELAY1(x);ADGO=1;
}
}
}
//-------------刹车处理子程序------------------
void BREAKON()
{
char x;
off=0; //off清零,如果是干扰则不复位
shutdown=0;
if(RB0==1) { //如果刹车信号为真,则停止输出电压
ADIE=0; //关AD 中断
INTE=0; //关刹车中断
CCPR1L=FULLDUTY; //输出电压0
TMR1ON=0; //关CCP2,不再触发AD
for(;ADGO==1;) continue;//如正在采样,则等待采样结束
ADIF=0; //ADIF 位清零
CHS0=0; //选择通道0 采样手柄
CHS1=0;
x=1;
DELAY1(x);
do {
ADGO=1;
for(;ADIF==0;)continue;
ADIF=0;
CCPR1L=FULLDUTY;
asm("CLRWDT");
tsh=(ADRESH>>1);
}while(tsh>TSON||RB0==1); //当手柄值大于2.2 V 或刹车仍旧继续时,执行以
//上语句
off=1; //置复位标志
}
}
//---------欠保护子程序-------------------
void POWER()
{
char x;
lowpower=0;
voltage>>=1; //电压值换为7 位,以利于单字节运算
if(voltage<VOLOFF) { //电池电压小于3*k(V)时保护
ADIE=0;
INTE=0;
TMR1ON=0;
CCPR1L=FULLDUTY;
for(;ADGO==1;)continue;
ADIF=0;
CHS0=0;CHS1=1;
x=1;
DELAY1(x);
do{ADGO=1;
for(;ADIF==0;)continue;
ADIF=0;
voltage=(ADRESH>>1);
CCPR1L=FULLDUTY;
asm("CLRWDT");
}while(voltage<VOLON); //电池电压小于35 V 时继续保护
off=1; //置复位标志
}
}
//------------电流环运算子程序-----------------
void CURPI()
{ static int curep=0x00,curek=0x00,curuk=0x00;
union data{int pwm;
char a[2];}b; //定义电流环运算寄存器
curpid=0; //清电流运算标志
curep=curek*CURB; //计算上一次偏差与比例系数的积
if(currenth<2)currenth=2; //如果采样电流为零,则认为有一个小电流以利于
//使转速下降
currenth>>=1;
curek=gcur-currenth; //计算本次偏差
curuk=curuk+curek*CURA-curep; //按闭环PI 运算方式得到本次输出结果,下
//面对结果进行处理
if(curuk<0x00) { //如果输出小于零,则认为输出为零
curuk=0;CCPR1L=FULLDUTY;CCP1X=0;CCP1Y=0;
}
else if(curuk-THL>=0) { //如果输出大于限幅值,则输出最大电压
curuk=THL;CCPR1L=0;CCP1X=0;CCP1Y=0;
}
else { //否则,按比例输出相应的高电平时间到CCPR1 寄存器
b.pwm=THL-curuk;
b.pwm<<=1;
CCPR1L=b.a[1]; //CCPR1L=(b.pwm>>8)&0x0ff;将PWM 寄存器的高半字节
if(b.pwm&0x80!=0) CCP1X=1;
else CCP1X=0;
if(b.pwm&0x40!=0) CCP1Y=1;
else CCP1Y=0;
}
}
//---------------转速环运算子程序-----------------------
void SPEPI()
{ static int speep=0x00,speek=0x00,speuk=0x00;
int tsh1,speed1; //转速寄存器定义
spepid=0; //清转速运算标志
if(spe==1) speed1=0x00; //若转速太低,则认为转速为零
else speed1=0x7f-speed; //否则计算实际转速
if(speed1<0) speed1=0;
speep=speek*SPEB;
tsh1=tsh-0x38; //得到计算用的手柄值
speek=tsh1-speed1;
if(tsh1<0) {speuk=0;gcur=0;} //当手柄值低于1.1 V 时,则认为手柄给定为零
else { //否则,计算相应的转速环输出
if(tsh1>=GSPEH) //限制最大转速
tsh1=GSPEH;
speuk=speuk+speek*SPEA-speep; //计算得转速环输出
if(speuk<=0X00) {speuk=0x00;gcur=0x00;}//转速环输出处理
else if(speuk>GCURHILO) { //转速环输出限制,即限制最大电流约12 A
speuk=GCURHILO;gcur=GCURH;}
else { //调速状态时的输出
gcur=(speuk>>4)&0x0ff;
}
}
}
//-----------主程序-------------------------
main()
{
for(;;){
INIT877(); //单片机复位后,先对其进行初始化
off=0; //清复位标志
for(;off==0;) { //复位标志为零,则执行下面程序,否则复位
if(curpid==1) CURPI(); //电流PI 运算
else if(spepid==1) SPEPI(); //转速PI 运算
else if(lowpower==1) POWER();
else if(shutdown==1) BREAKON();
asm("CLRWDT");
}
}
}
//---------中断服务子程序---------------------
#pragma interrupt_level 1
void interrupt INTS(void)
{
if(RBIF==1) {RBIF=0;sample();}
else if(ADIF==1) AD();
else if(INTF==1) {shutdown=1;INTF=0;} //刹车中断来,置刹车标志
分享到:
新浪微博
腾讯微博
百度搜藏
QQ空间
百度贴吧
百度空间
微信
更多
品牌专修
:( 关键字:
PIC单片机控制的电动自行车驱动系统C程序电动车维修转速,寄存器,手柄,电流,子程序
)
东风
珠峰
金杯阁
驰野
阿尔法
中兴
上饶客
高仕
救护车
峨眉客
依维柯
王牌
吉江
捷安特
升降车
冷藏车
雪铁龙
通信车
蒙迪欧
沈飞日
爱丽舍
春洲汽
东风
豪爵
林业集
台铃
蓝旗亚
斯太尔
川马客
北方红
乐骋
宝马
空降车
德国曼
美的客
路虎
马自达
路宝
金杯
法拉利
库斯特
两栖车
尼奥普
龙江客
斯柯达
双环小
安凯
力帆5
豹风
东风
福克斯
一汽自
豪豹
飞扬
景程
Vol
萨博
QQ
绿源
吉利
江南精
长安
圣达菲
雅迪
星王
雅阁
万象大
京华
西雅特
凯旋
大阳
装卸车
力帆
少林客
君越
中大客
哈飞
五菱阳
桑塔纳
新大洲
瑞虎
隆鑫
长城
通用汽
森地
扬子
兰博基
阳光
林荫大
速腾
华北汽
道奇
牡丹客
洛阳宇
建设
吉田
红岩
名爵
途胜
波罗
明锐
水星
铁马
奔奔
霍顿
更多品牌专修
配件展示:
更多商品展示
聚乙烯PP EP2
适用车型:
泰国巴赛
TPU 58206
适用车型:
通用级
PA6 PX930
适用车型:
通用级
TPEE DYM1
适用车型:
通用级
闭锁器 右
适用车型:
老阳光风
前桥/元宝梁1.6
适用车型:
YDQD
倒水板
适用车型:
捷达
下球头(L)
适用车型:
猎豹
6126柴油机六配
适用车型:
潍柴发动
大包围-后轮眉L
适用车型:
逍客
后杠包角-R
适用车型:
锐旗
AES 1520U
适用车型:
通用级
丰田4700发动机
适用车型:
丰田
离合器压盘
适用车型:
皮卡
尾灯总成-L
适用车型:
乐风
相关评论:
请自觉遵守互联网相关政策法规,作者可以直接删除恶意评论、广告或违禁词语
汽配通=管理软件+传真机+宣传器 +连锁店
汽配通是一个汽配管理软件
可以用汽配通进行配件的进、销、存管理,功能全面专业,操作简单易用,性能稳定、永不出错,免费试用、 不断升级、终身维护
汽配通是一个智能传真机
当客户通过汽配通发来问价或订货传真时,立即会收到短信、声音及页面三种提示,按键自动接收,直接填写报价迅速回传(如用汽配通管理库存,则可自动调出库存直接报价,订单传真则可快速转销售单)
汽配通是一个速效宣传器
可以通过汽配通服务平台迅速让全国客户查询到自己的名片信息及发布的配件信息(不限数量随时发布,客户可直接订购发布的配件,订单可直接转为销售单)
汽配通是一个加盟连锁店
商家可以创建自己的联盟,将加入自己联盟的成员设为好友,好友就能共享自己的库存信息,能随时查询和订购。联盟内每个成员还可以发布100条推荐配件信息,供同联盟成员间相互交流及订货
>>>汽配通【汽配管理软件 13.63】
汽修通=管理软件+传真机+搜索器 +大仓库
汽修通是一个汽修美容管理软件
可以用汽修通进行汽车维修及美容从进厂接待、维修派工、出厂结算一系列过程完整的管理,流程清晰、操作简单,性能稳定、永不出错,免费试用、不断升级、终身维护
汽修通是一个智能传真机
可以用汽修通光速写出一长串配件问价单或订货单,图文并茂,一键发送。接收方立即会收到短信、声音及页面三种提示
汽修通是一个配件搜索器
当疑难配件不知哪里购买时,可以通过汽配通直接搜索商家,可以直接搜索配件,可以传真群发询问。总之,汽配通,没有找不到的配件
汽修通是一个超级大仓库
在汽修通的“联盟管理”处选择一个联盟加入,申请同联盟的商家成员设置自己为好友,这样可以拥有此商家的库存信息(最多可以拥有10位好友商家的库存),方便查询及直接订货
>>>汽修通【汽修美容管理软件 13.63】
汽修百科目录索引
更多>>
品牌汽车维修
汽车保养维修
汽车电器维修
汽车构造维修
修车常识
汽修知识
维修案例
汽车美容技术
汽车装饰常识
汽车改装技术
修理厂管理制度
汽配生意怎么做
汽车4S店管理
电动车维修
修车视频
摩托车维修
相关汽修改知识
更多>>
租块电池每个月10元钱 有人做
关于电动自行车安全行驶的“技术
西安工商部门提醒:谨慎购买电动
锁具易撬盗窃率居高不下 非机动
延长寿命电动车所需的日常维护和
电动车上牌要盖(Guy)章社区
无证三轮电动车半路撞倒行人弃乘
8分钟完成充电斯巴鲁(Suba
新一代产品雅哥弟锂电池电动车近
私人电动车车库失窃 物业公司没
消费指南:电动自行车选购与使用
锂离子电池的安全与材料性能息息
时下“环保电动车”消费成为“时
归纳一下最近比较流行的电动自行
这些防滑防冻的窍门 大家可能会
电动自行车用电机控制器原理与维
揭开问题电瓶黑幕被盗电瓶翻新后
电瓶车频频被盗警方支招预防盗窃
免充电的电动汽车 真正节能为奥
停在车库的电动车被盗物业公司要
电动车电池问题多多 工商建议购
美卡得充电器解决了电动车的致命
丹阳消委会发布消费警示:选购电
技术园地:深度解析电动自行车电
购车指南:购买电动车时应注意的
提醒:选购电动自行车得留心电瓶
电动车用铅锌电池总容量只占全国
自制升降机六旬大爷把电动自行车
技术园地:论电动自行车控制器可
第一辆电动Smart ed正式
老技工造无电瓶电动车已获国家专
力拼SMART济南飞宝电动车北
最新加盟汽车修理厂
更多>>
平安到家汽修汽配
同诚汽车维修厂
吉林市北方通盛汽车维修有限责任
成达汽修
新界汽修
洛宁宏大汽车专业服务站
武汉市信达汽车综合服务中心
新疆荣腾玻璃
大井汽车修配部
深圳市华集实业有限公司汽车修配
日升汽修
银华汽修
兴融汽车维修有限公司
汽配最新供求
哈市德利拆车件
配件明细
々PC 24SRFD
=PBT 3309HRHF
求购摩托车、发电机零配件
求购奥迪C6 2.8喷油嘴
※PC 6870
求购一汽佳星【幸福使者】型号LJ
黑豹HFJ1010WV油箱
求购安全带卡扣 安全带上小零件
关于汽配110网
|
各地汽配QQ群
|
网站建议反馈
|
友情链接
|
联系我们
|
代理合作
|
会员服务
|
全国汽车配件联盟
|
广告招商
|
收藏本站
|
网络交易安全提示
|
网站免责声明
版权所有:汽配110网 www.qp110.com 汽车后服务市场专业网络平台 怀化好易简科技有限公司
湘ICP备12007470号
E-mail:webmast@qp110.com
湘公网安备 43120202000083号