版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/pic 16f72单片机控制的电动自行车c源程序,原理图及设计说/pic16f72单片机控制的电动白行车驳动系统c程序#include <pic.h>电动车双闭环程序,采用双闭环方式控制电机,以得到最好的zh转速性能,并且可以限制电机的最人电流。木应用程序用到两个ccp部件,其中ccp1用于pwm输出,以 控/制电机电压;ccp2用于触发ad,定时器tmr2、tmr1, int中断,rb 口电平变化中 断,看门狗以及6个通用i/o 口#define and oxeo /状态采集 5, 6, 7 位#dcfinc cura oxoa 电流环比例和积分系数之和#define curb
2、 0x09 电流环比例系数#define thl 0x6400 电流环授大输出#define fullduty oxoff/占空比为1时的高电平时间#define spea oxld 转速环比例和积分系数之和#dcfinc speb oxlc /转速环比例系数#define gcurhilo oxo33o 转速环最人输出#define gcurh 0x33 最大给定电流#define gspeh 0x67 最大转速给定#define tson ()x38 手柄开启电压1.1 v, tson*2为刹车后手柄开启电压,即/2.2 v#define volon 0x4c 低电压保护重开电压3.0 v
3、即33 v#define voloff 0x49 低电压保护关断电压2.86 v即31.5 vvolatile unsigned char delayh,delayl,oldstate,speed,speedcount,tsh,count_ts,count_vol,gcur,currenth,voltage; 寄存器定义static bit sp 1 ,spc,ts,volflag,spcpid,lowpowcr,off,shutdown,curpid; / 标志位定义static volatile unsigned char new 10j=0xaf,0xbe,0xff,0x7e,0xcf,
4、0xff,0xd7,0x77,0xff,0xff; 状态寄存器表/pic16f877初始化子程序void init877()portc=0x0ff; 关断所有 mosfettrisc=0x02; 设置 c 口输出pie 1=0x00;/中断寄存器初始化,关断所冇中断trisa=0xcf; /设置 ra4,ra5 输出tr1sb=oxef;/rb 口高三位输入,采集电机三相的霍尔信号portc=newr(portb&and)>>5;/采集第一次崔尔信号,并输出相应的信号,导通 两个mos管t2con=0x01;/tmr2 4 分频ccprll=0x0ff;/初始时pwm 输出
5、全高ccp1con=oxoff;/ccp1 设置为 pwm 方式ccp2con=oxob; /ccp2设置为特殊方式,以触发adadcono=ox81;/ad时钟为32分频,fl. ad使能,选择ano通道采集手 柄电压tmr2=0x00; /tmr2寄存器初始化tmr1h=()x()(); /tmr1 寄存器初始化tmril=oxoo;t1con=oxoo;/tmr1 为 1 分频ccpr2h=0x08;ccpr2l=0x00; /电流采样周期设置为tad=512 u spr2=0xc7; /pwm 频率设證为 5 khzadcon 1=0x02; /ad 结果左移option=oxfb;
6、/int 上升沿触发tmr2on=1;/pwm 开始工作intcon=oxd& 中断设置 gie=1,peie=1,rb1e=1adie=1;/ad中断使能speedcount=oxoo; /转速计数寄存器 spccd=0x7f; 转速保持寄存器 spe=l; 低速标,忐位 spl = l; 低速标志位oldstate=oxoff; 初始状态设置,区别于其他状态 count_ts=()x()8; /电流采样8次採集1次手柄 count_vol=oxoo; /采样256次手柄,采集1次电池电压 ts=l;/nf以釆集手柄值的标店位adgo=1;/ad采样使能tmr1on=1;/ccp2部
7、件开始工作/延时子程序#pragma intcrrupt_lcvcl 1void delay l(x)char x;delayh=x; 延时参数设置#asmdelay2 movlw 0x06movwf _delayldelay 1 decfsz _delaylgoto delay 1decfsz _delayhgoto delay2#en dasni/状态采集子程序void samplc() char state i ,state2,state3,x;do x=l;state 1 =(portb &and); 霍尔信号采集delay l(x);state2=(portb&and
8、);while(statel-state2); 当三次采样结果不相同时继续采集状态 if(statel-oldstate!=0) /看本次釆样结果是否厶/上次相同,不同 则执行oldstate=state 1; 将本次状态设置为ih状态state 1 =(oldstate»5);portc=ncwstatcl;/c 口输出相应的信号触发两个mos管 if(spl=l) spc= 1 ;spl =0;else 如果转速很低,则spe置1spe=0;spl=0;speedcount«= 1;statc3=(tmr 1 h»2); /否则,spc=0,计转速 speed
9、=speedcount+state3; /speed 寄存器为每 256 us 力口 1 speedcount=0;/ad釆样子程序void ad()char x;adif=0;清ad小断标志位if(ts=l) 如果为手柄采样,则采样手柄值chs0=l; 选择电流采样通道count_vol=count_vol+1; /电池采样计数寄存器 spepid=l; 置转速闭环运算标志 ts=o;tsh=adresh; 存手柄值if(count_vol=0) /如果电池釆样吋间到,则选择an2通道,采集电池电压 chs0=0;chs 1=1 ;volflag= 1 ;x= 1 ;delay l(x);a
10、dgo= 1;else if(volflag=l) 电池采样完毕,进行相应的处理chsl=0;chs0=1 ;volflag=0;voltago=adresh;lowpowcr=l;else /®则,中断为采样电流中断 speedcount=speedcount+1; /speedcount 寄存器加 1,作为测录转速用 if(speedcount>0x3d) spl = l;/如果转速低于 1 000000 p s/(512 u s*3eh*3) /则认为为低速状态currenth=adresh;curpid=l;coiint_ts=count_ts-1;if(count_t
11、s=0) 如果手柄时间到,则转入手柄采样通道chs0=0;count_ts=0x08;ts= l;x=l ;delay 1 (x);adgo= 1;/刹车处理子程序void breakon0char x;off=0; /off清零,如果是干扰则不复位shutdown=0;if(rb0=l) 如果刹车信号为真,则停止输出电压adie=0; /关 ad 中断inte二0;/关刹车中断ccpr1l=fullduty; 输出电压 0tmr1 on=0; 关 ccp2,不再触发 adfor(:adgo=i;) continue;/如正在采样,贝u等待采样结束adif=0; /adif 位清零chs()=
12、(); 选择通道()采样乎柄chs 1=();x=l;delay l(x);do adgo= 1;for(;adif=();)continue;adif=0;ccpr1l=fullduty;asm(“clrwdt');tsh=(adresh»l);whilc(tsh>tsoniirbo=l); /当手柄值人于2.2 v或刹车仍iii继续时,执行以 上语句off=l;置复位标志/欠保护了程序void power()char x;lowpower=0;voltage»=l; /电压值换为7位,以利于单字节运算 if(voltage<voloff) /电池电压
13、小于3*k(v)时保护 adie=0;inte=0;tmr10n=0;ccpr1l=fullduty;for(;adgo= 1 ;)continue;ad1f=o;chso=o;chs1 = 1;x=l;delay l(x);doadgo=l;for(;adif=0;)continue;adif=o;voltage=(adresh» 1);ccpr1l=fullduty;asm(“clrwdt“);while(voltage<volon); /电池电压小于35 v时继续保护 off=l;/置复位标志/电流环运算子程序void curpk) static int curep=0x
14、00,curek=0x00,curuk=0x00;union data) int pwm;char a2;b;/定义电流环运算寄存器curpid=0; 清电流运算标志cuwp=curek*curb; /计算上一次偏差与比例系数的积 if(currenth<2)currenth=2; 如果采样电流为零,则认为有一个小电流以利于 使转速下降currcnth»=l;curek=gcur-currenth; / 计算木次偏差 curuk=curuk+curek*cura-curep; /按闭坏pi运算方式得到本次输出结果, 而对结果进行处理if(curuk<0x00) 如果输出小
15、于零,则认为输出为零curuk=o;ccpr 1 l=fullduty;ccp 1 x=0;ccp 1 y=0;else if(curuk-thl>=0) 如果输出大于限幅值,则输出最大电压 curuk=thl;ccpr 1 l=0;ccp 1 x=0;ccp 1 y=0;else /否则,按比例输出相应的高电平时间到ccpr1寄存器b.pwm=thl-curuk;b.pwm«=l;ccpr1 l=b.a 1 ; /ccpr1 l=(b.pwm»8)&()x()ff;将 pwm 寄存器的高半字节 if(b.pwm&0x80!=0) ccp1x=1;el
16、se ccp1x=o;if(b.pwm&0x40!=0) ccp1y=1;else ccp1y=o;/转速环运算子程序void spepi0 static int speep=0x00,speek=0x00,speuk=0x00;int tshl,speedl; /转速寄存器定义 spepid=0; 清转速运算标憑 if(spe=l) speed 1 =0x00; /若转速太低,则认为转速为零 else speed 1 =0x7f-speed; 否则计算实际转速 if(speedl<0) speed 1=0;speep=speek*speb;tshl=tsh-ox38; /得到计
17、算用的手柄值speek=tshl-speed 1;if(tsh 1 <0) speuk=0;gcur=0; 当手柄值低于1.1 v时,则认为手柄给定为零 clse否则,计算相应的转速环输出 if(tshl>=gspeh)/限制最大转速tshl 二gspeh;speuk=speuk+speek*spea-speep; 计算得转速环输出 if(speuk<=0x00) speuk=0x00;gcur=0x00;转速坏输出处理 else if(speuk>gcurhilo) 转速环输岀限制,即限制最人电流约12a speuk=gcurhilo;gcur=gcurh;else
18、调速状态吋的输出gcur=(speuk»4)&0x0ff;/主程序main()for(;)init8770; 单片机复位后,先对其进行初始化off=0; 清复位标志for(;off=0;) /复位标志为零,则执行下面程序,否则复位 if(curpid= 1) curpi(); 电流 pi 运算 else if(spcpid=l) spepi(); /转速 pi 运算 else if(lowpower=l) power();else if(shutdown=l) breakon();asm(nclrwdtn);/中断服务子程序#pragma interrupt_level 1v
19、oid interrupt ints(void)if(rbif=l) rbif=o;sample();else if(adif=l) ad();else if(intf=l) shutdown=l;intf=0; /刹车中断来,置刹车标志设计思路:目的目前电动车市场各种功能无刷控制器琳琅满目,种类繁多。普通模拟专用芯片已是穷途末路, 而利用单片机控制则能做到“只有想不到,不怕做不到”地步,九花八门的单片机纷纷推向 电动车这个新兴的行业。我公司根据电动车市场的流行趋势,制定了无刷控制器的设计方案。 功能概述冃前电动车市场上的控制器分冇刷控制器和无刷控制器两大类,rh于冇刷电机输出扭距小, 效率低
20、,需要定期更换炭刷等诸多缺点而逐步被输出扭距大、效率高、使川寿命长的无刷电 机取代。根据电动车车型分简易车和豪华车型以及电动摩托车,简易车功率一般在250w以 下,而豪华车都在350w以上,设计时必须考虑。简易车的常用功能冇1: 1助力、巡航、 电量及工作状态显示。工作模式有自动和手动切换两种。豪华车型根据客八的随意性有很多功能,主要有飞车保护、 软abs刹车、反充电、双动力(档位切换)、电机锁(关闭电源电机锁定)等。为方便调试和防止非法解密,设计采用专用调试工具,外接一个带有键盘和显示器(数码管) 的工具来设定一些基木参数,如欠压値、限流、相位选择和工作电压选择等。可以利用单片 机内部或外接
21、eeprom保存设置参数。通过该调试工具达到系列产品的通用性。主耍技术参数1基木功能1.1工作电压键盘设定,分12、24、36、48、60、72v档,根据输入电压采样值,确定欠压保护值,单 节电池保护电压为10.5v±05v,低于该值关闭输出。由于取样电压冇相应的误差,用键盘 应可以微调。欠压工作方式:当电源电压低于设定值时,关闭输出,当电源电压滞回到大于 设定值2v时,开启输出。另一种方式为当电源电压低于电池容量的50%吋,相应缩减输出 脉宽,以10个百分点逐减,到设定值时减为零即关闭输出,滞回则相反。1.2调速电压调速把输出电压范围为14.2v,控制器起点电压应高于iv,控制器的
22、脉宽调制范围应设 定为1.383.8v,大于3.8v输出为全打开。1.3刹车断电分高电平、低电平和abs三种方式,高、低电平控制方式由键盘设定,abs单独引脚控制, 该功能如不用时,i/o 口可以指定其它功能。1.4限流当取样信号到达设定点时,采用对pwm进行递减的方法,来减小电机电流,使输出电流不 超过设定值。即最人输出电流怛定在设定点。设定值由键盘设定,以便调试。1.5过流保护:由于mcu单片机a/d采样速度的因素造成输出电流大节设定值,在这种情况下,设定一个 保护值,关闭输出,一般设定为大于限流值23a。此值应由键盘设定。1.6堵转保护限流值保持13秒后,关闭输出。1.7相角选择60度/120度选择,键盘设定。1.81: 1助
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度孟安与配偶离婚协议:共同财产分割及子女监护协议4篇
- 导演与摄影师2025年度合作协议3篇
- 2025年销售人员合同范本:旅游产品销售合作协议2篇
- 城东小学2025年度智能调光窗帘纱窗采购合同2篇
- 二零二五年度美发店员工培训与职业发展合同4篇
- 2025年度金融衍生品买卖合同标的交易风险管理4篇
- 2025年度绿色能源餐馆司炉员专项聘用合同3篇
- 郑州城市职业学院《交通监控系统》2023-2024学年第一学期期末试卷
- 二零二五版苗木种植保险产品设计与销售合同4篇
- 2025年度房地产租赁融资合同模板4篇
- 2025春夏运动户外行业趋势白皮书
- 《法制宣传之盗窃罪》课件
- 通信工程单位劳动合同
- 2024年医疗器械经营质量管理规范培训课件
- 高低压配电柜产品营销计划书
- 2024年4月自考02202传感器与检测技术试题
- 社会系统研究方法的重要原则
- 重症医学科健康宣教手册
- 2022版《义务教育英语课程标准》解读培训课件
- 五个带头方面谈心谈话范文三篇
- 互联网的发展历程
评论
0/150
提交评论