ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:102.89KB ,
资源ID:7471923      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7471923.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机程序.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机程序.docx

1、单片机程序 电机PID算法应用实例1. /=PID参数设置=2. /运行PID时间33. #definePIDCYC(2)/20MS运算一次4. 5. #defineAEKZ(int16)(2)/此偏差范围内不调节6. #defineAEKF(int16)(-2)/7. 8. #defineMAX_PID_VALUE_Z(int16)(40)/PID每次调节值的最大限制9. #defineMAX_PID_VALUE_F(int16)(-40)10. 11. #defineMAX_ROP(V_MAX_PWM+2)/最大功率值V_MAX_PWM=25012. #defineMIN_ROP(10)/

2、最小功率值13. /=14. /KAKBKC参数不超过15. #defineKA(uint8)(10)16. #defineKB(uint8)(5)17. #defineKC(uint8)(1)18. 19. #defineKP1(uint8)(240)20. 21. /=22. typedefstructMC_PID23. 24. int16EkP1;/本次偏差25. int16EkP2;/上次偏差26. int16EkP3;/上上次偏差27. 28. int16SumP13;/当前+上上次偏差运算值29. int32dwTmp1;30. 31. uint16SetRate;/设定速度32.

3、 uint16CuRate;/当前速度33. 34. tPID;35. 36. externtPIDtPidA;37. 38. #defineEkP1tPidA.EkP139. #defineEkP2tPidA.EkP240. #defineEkP3tPidA.EkP341. #defineSumP13tPidA.SumP1342. #definedwTmp1tPidA.dwTmp143. 44. #defineSetRatetPidA.SetRate45. #defineCuRatetPidA.CuRate46. 47. /*48. /函数名称:RumTempPid49. /函数功能:温度控

4、制PID50. /入口参数:Power为当前功率值速度设定值当前值51. /出口参数:无52. /返回值:功率值53. /*/54. uint8RumMotorPid(uint8Power,uint16SetValue,uint16CuValue)55. 56. uint16wTmp1;57. 58. /F_EK1=0设定当前59. /F_EK1=1设定=MAX_PID_VALUE_Z)71. 72. SumP13=MAX_PID_VALUE_Z;73. 74. elseif(dwTmp1=MAX_PID_VALUE_F)75. 76. SumP13=MAX_PID_VALUE_F;77. 7

5、8. else79. 80. SumP13=(int16)dwTmp1;81. 82. 83. if(SumP13=wTmp1)88. 89. Power-=wTmp1;90. if(PowerMIN_ROP)/最小功率限制91. 92. Power=MIN_ROP;93. 94. 95. else96. 97. Power=MIN_ROP;98. 99. 100. elseif(SumP13AEKZ)和大于0功率加105. 106. wTmp1=SumP13+Power;107. 108. if(wTmp1=MAX_ROP)/最大功率限制109. 110. wTmp1=MAX_ROP;111

6、. 112. 113. Power=wTmp1;114. 115. 116. returnPower;/返回功率值117. 118. 119. 120. 121. /-应用实例-122. /*123. /函数名称:CmdPidFct124. /函数功能:PID控制125. /入口参数:无126. /出口参数:无127. /进行PID运算128. /*129. voidCmdPidFct(void)130. 131. staticuint8Tcon=0;132. 133. Tcon+;134. if(Tcon=PIDCYC)/PIDCYC20MS135. 136. Tcon=0;137. CuR

7、ate=T_Cyc2;/把采样值除4138. /R_SetPwm=RumMotorPid(R_SetPwm,SetRate,CuRate);139. R_CurPwm=RumMotorPid(R_CurPwm,SetRate,CuRate);140. /R_CurPwm=100;141. 142. 143. 144. 145. 阻容降压电源中降低静态功耗的经典电路图146. 分类:单片机应用电路应用2013-08-17 09:37184人阅读评论(0)收藏举报147. 电路图阻容降压静态功耗148. 一、本方案适用场合1、低成本电源方案-阻容降压电源2、驱动一路12V或24V继电器3、要求静态

8、功耗低,可做到低于0.7W静态功耗149. 电路1如下:150. 151. 继电器驱动电路2如下:152. 153. 二、电路解析本电源电路可分为两部分,一部是正半波回路,另一部分是负半波回路。1、先来看正半波回路,此回路通过一个12V稳压管ZD1,12V稳压管后面还有个78L05(U1),由此就得到了两个电源:12V 与 5V这里的12V通常不用,而5V拿来给MCU供电,外加一些LED、蜂鸣器驱动等154. 2、再来看负半波回路,此回路也通过一个12V的稳压管ZD2,但关键点是在此12V稳压管的旁边并联了一个三极管Q1,这个Q1就是这个电路中最大的亮点,来看看:我们可通过MCU控制P_HT这

9、个IO口P_HT=0时,三极管Q2导通,从而使得Q1导通,当Q1导通时,稳压管ZD2被三极管的CE极短路,最终ZD2在这时就没有起到稳压的作用,VCC的电压为接近12VP_HT=1时,三极管Q2不导通,从而Q1也没有导通,这时稳压管ZD2起到了稳压的作用,这时候VCC相对12V来讲有12V的电压,这个电压刚好可用作继电器的驱动。最终我们就可通过控制P_HT来控制驱动继电器,当控制器刚上电机,关掉负半波的回路,也就是继电器断开的状态,这时负半波是直接被三极管Q1所短路的,那么这里ZD2就没有功耗的产生,从而降低也静功耗。155. 此电路图实属巧妙,为我司众多产品做出了巨大的贡献。用定时中断来接收

10、红外遥控信号分类:单片机应用2013-07-24 08:28247人阅读评论(0)收藏举报用定时中断来接收红外遥控信号cppview plaincopy1. /=红外接收相关定义=2. #defineIrDatHigh(P_IrRec=1)/接收数据高3. #defineIrDatLow(P_IrRec=0)/接收数据低4. #defineIr_EdgeDown(RStatus_IR&0x03)=0x02)/IR下降沿1-05. #defineIr_EdgeUp(RStatus_IR&0x03)=0x01)/IR上升沿0-16. 7. /红外数据长度N个字节可自定义8. #defineIrDa

11、tLong(uint8)209. 10. /-起始11. #defineTST_LOW(uint8)107/起始低脉宽5.35MS12. #defineTST_LOW_L(TST_LOW-20)/起始低判断范围13. #defineTST_LOW_H(TST_LOW+20)/1214. #defineTST_HIGH(uint8)145/起始高脉宽7.25MS15. #defineTST_HIGH_L(TST_HIGH-20)/起始高判断范围16. #defineTST_HIGH_H(TST_HIGH+20)/17. /-数据18. #defineTDAT_LOW(uint8)28/数据低脉宽

12、1.4MS19. #defineTDAT_LOW_L(TDAT_LOW-19)/数据20. #defineTDAT_LOW_H(TDAT_LOW+19)/1021. #defineTDAT_HIGH(uint8)66/数据高脉宽3.3MS22. #defineTDAT_HIGH_L(TDAT_HIGH-19)/数据23. #defineTDAT_HIGH_H(TDAT_HIGH+19)/24. 25. 26. 27. voidinterruptser(void)/中断服务程序28. 29. staticuint8PIR=0;30. staticuint8RStatus_IR=0;31. sta

13、ticuint8ByteNum=0,BitNum=0;32. 33. TIM6_SR1=0x00;/清除更新标志50u中断一次34. 35. 36. TconIr+;/脉冲计数37. if(TconIr=0)/溢出38. 39. RMIR=MIR_RST;/退出接收状态40. 41. 42. PIR=1;43. if(IrDatHigh)/读IR接收管脚的状态44. 45. PIR|=0x01;46. 47. 48. /对接收管脚的数据进行滤波处理49. RStatus_IR=TST_LOW_L)&(TconIr=TST_HIGH_L)&(TconIr=TDAT_LOW_L)&(TconIr=TDAT_LOW_H)130. 131. IrDatRceByteNum&=(1=TDAT_LOW_L)&(TconIr=TDAT_LOW_H)134. 135. IrDatRceByteNum|=(1BitNum);136. 137

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1