bl_ctrl 制作笔记

5.5-- 今天把MK的代码截了一段下来,但是不能工作, 发现电流一直都是0A. 后来发现下臂IR2103是低电平驱动的,所以这里有问题,但是改过来还是不行.可能是程序本来就不通.电路方面,上下臂的线是接通的. 换了块2103情况依旧   再次检查电路, 然后重新写程序

 

5.7-- 昨晚试了下把上臂下臂调换, 结果换了以后才想到 PWM 在关闭的时候是为0的, 这样以来下臂的PWM在关断的时候恰恰导通了下臂, 所以只能重新写程序了.下臂导通的时候输出PWM,关断的时候应该是输出1 高电平.

 

5.9-- 查寄存器,查指令..很多东西都忘记了.通过这几个星期的看AN,发现我犯了先入为主这个毛病.很大程度上,都受第一篇"驱动你的无刷电机by夏风"他说用定时器降30度电气角的时间记录下来倒数,这个问题关乎到如何使用 TIMER0 的问题.还有就是分频的问题,虽然是可以解决,但是麻烦.而看到MK和MICROCHIP他们的代码,人家是用TIMER0作定长的计时,有点类似于时间片的概念.

 

5.13- 今天调了一个下午,发现了点问题:首先是TIMER0进入不了,其次就是换相时几个寄存器(PWM输出)的设定需要检查.

 

5.16- 终于有点动静了, 发声, 震动!上臂全部导通, 下臂只有B相导通,重新检查换相过程,尝试用另外一个换相顺序.下臂不会换相也是一个问题.

 

5.18- 对照了一下PIC的手册,发现换相没问题... 查一下是不是下臂的问题, 还有那个PWM的输出问题

 

5.20- 硬件出现大问题!

 

5.26- 抄MS的程序在main函数里的while(1)外循环,而不能进入while内...难道是自动复位?

 

5.27- 决定换MK的程序了

<think>好的,我现在要分析用户提供的这段代码,并为其添加注释。首先,我需要理解代码的整体功能和各个部分的作用。代码主要处理背光控制,根据环境光传感器的数据在白天和夜间模式之间切换,并调整PWM占空比。 首先看宏定义,BL_DAY_MODE和BL_NIGHT_MODE分别用1和0表示白天和夜间模式。BL_Mode和BL_Fitter是静态变量,BL_Mode存储当前模式,BL_Fitter可能用于计数或延迟。 BackLight_Init函数初始化BL_Mode为白天模式。BackLight_Process函数是核心处理逻辑,根据电源状态、自检状态和环境光数据来更新模式和计数器,并设置PWM占空比。 接下来,我需要逐步分析BackLight_Process函数中的条件判断。首先检查电源是否开启,如果开启则进入处理逻辑。如果自检状态为0,直接设置为白天模式,BL_Fitter为300。否则,检查Get_OPT3004Vld()是否有效,无效的话同样设置为白天模式和BL_Fitter=0。否则,根据BL_Fitter的值递增,然后根据当前模式判断环境光数据是否满足切换条件,如果满足则切换模式并重置BL_Fitter。 在白天模式下,如果环境光数据小于180且BL_Fitter达到300,则切换到夜间模式;否则重置BL_Fitter。夜间模式下,如果环境光数据大于200且BL_Fitter达到300,则切换回白天模式,否则重置BL_Fitter。最后根据BL_Mode设置PWM的占空比,电源关闭时占空比为0。 添加注释时,需要明确每个步骤的作用,特别是条件判断的逻辑和变量的用途。同时,注意代码中的函数调用如Common_Get_IG_Sts、SelfInspection.status、Get_OPT3004Vld、Get_OPT3004Data和TimerM_PWM_set_duty的具体功能,虽然这些函数的具体实现未给出,但可以根据名称推测其作用。 可能需要注意的地方包括BL_Fitter的作用,可能是为了防止频繁切换模式而设置的延迟计数器。当环境光变化时,需要等待BL_Fitter达到300才切换模式,这可能避免了由于短暂的光线波动导致的模式频繁切换。 最后,在注释中解释每个关键步骤的作用,比如初始化、模式切换条件、PWM设置等,确保其他开发者能够理解代码逻辑。 </think>```c #define BL_DAY_MODE 1 // 白天模式定义 #define BL_NIGHT_MODE 0 // 夜间模式定义 static uint8_t BL_Mode; // 存储当前背光模式(白天/夜间) static uint16_t BL_Fitter; // 滤波计数器,用于模式切换延迟 void BackLight_Init(void) { BL_Mode = BL_DAY_MODE; // 初始化为白天模式 } void BackLight_Process(void) { if (Common_Get_IG_Sts( ) == COMMON_POWER_ON) // 电源开启时执行 { if(SelfInspection.status == 0) // 自检通过时 { BL_Mode = BL_DAY_MODE; // 强制设置为白天模式 BL_Fitter = 300u; // 设置滤波计数器初始值 } else // 自检未通过时 { if(Get_OPT3004Vld() == 0u) // 光线传感器数据无效时 { BL_Fitter = 0u; // 重置滤波计数器 BL_Mode = BL_DAY_MODE; // 保持白天模式 } else // 光线传感器数据有效时 { if(BL_Fitter < 300) // 如果计数器未满 { BL_Fitter ++; // 计数器递增 } if(BL_Mode == BL_DAY_MODE) // 当前为白天模式 { if(Get_OPT3004Data() < 180) // 环境光低于阈值 { if(BL_Fitter >= 300u) // 延迟时间到达 { BL_Mode = BL_NIGHT_MODE; // 切换为夜间模式 BL_Fitter = 0u; // 重置计数器 } } else // 环境光高于阈值 { BL_Fitter = 0u; // 重置计数器 } } else // 当前为夜间模式 { if(Get_OPT3004Data() > 200) // 环境光高于阈值 { if(BL_Fitter >= 300u) // 延迟时间到达 { BL_Mode = BL_DAY_MODE; // 切换为白天模式 BL_Fitter = 0u; // 重置计数器 } } else // 环境光低于阈值 { BL_Fitter = 0u; // 重置计数器 } } } } // 根据当前模式设置PWM占空比 if ( BL_Mode == BL_DAY_MODE ) { TimerM_PWM_set_duty(TIMERM_COUNTER1, TIMERM_CHB, 600); // 白天模式占空比 } else { TimerM_PWM_set_duty(TIMERM_COUNTER1, TIMERM_CHB, 420); // 夜间模式占空比 } } else // 电源关闭时 { TimerM_PWM_set_duty(TIMERM_COUNTER1, TIMERM_CHB, 0); // 关闭PWM输出 } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值