鄙人才疏学浅,如有看不入眼的代码和见解,烦请各位指教。
回放重启的配置
我们先看一下回放重启如何配置。
static nrf_drv_pwm_t m_pwm0 = NRF_DRV_PWM_INSTANCE(0);
static nrf_drv_pwm_t m_pwm1 = NRF_DRV_PWM_INSTANCE(1);
static nrf_drv_pwm_t m_pwm2 = NRF_DRV_PWM_INSTANCE(2);
// This is for tracking PWM instances being used, so we can unintialize only
// the relevant ones when switching from one demo to another.
#define USED_PWM(idx) (1UL << idx)
static uint8_t m_used = 0;
static uint16_t const m_demo1_top = 10000;
static uint16_t const m_demo1_step = 200;
static uint8_t m_demo1_phase;
static nrf_pwm_values_individual_t m_demo1_seq_values;
static nrf_pwm_sequence_t const m_demo1_seq =
{
.values.p_individual = &m_demo1_seq_values,
.length = NRF_PWM_VALUES_LENGTH(m_demo1_seq_values),
.repeats = 0,
.end_delay = 0
};
values.p_common为回放的序列。
length为回放长度。
repeats为重复次数
end_delay为是否需要附带周期。
因为repeats和delay这些内容我们已经配置过了,可以配置为0,其他的都可以按照例程仿写,不过是换个名称而已。那么我们的快速启动就如图所示了,具体可以添加哪些使其减少bug和更加方便,就不多说了,这只是一段测试代码,具体还是要大家自己尝试。
快速配置PWM数据
void update_pwm(int16_t duty_cycle)
{
m_seq_values = duty_cycle;
nrf_drv_pwm_simple_playback(&m_pwm0, &m_seq, 1, 0);
}
完成了pwm的配置,接下来我们了解一下如何处理电机的堵转保护和电机加压功能,在这里浅显的回答下,堵转就是检测在超过一个比较大的电压数值之后,将mcu停止进入休眠,而加压就是检测到电压降低后在进行增加装载值的操作或者是直接根据当前应该处于哪个压力值来判断。后续了解到adc时会说到这个部分。
if(adcV >= 80 && mVENDOR_SYS_RUN.key_for_open != 0)
{
mVENDOR_SYS_RUN.power_dect_cant_work = 1;
}
if(brake_gear != mVENDOR_RUN_INFO.brake_gear_level)
{
NRF_LOG_INFO("brake_gear = %d,brake_gear_level = %d\r\n",brake_gear,brake_gear_level);
mVendro_run_info.brake_gear_level = 0;
}
主函数引用
if(mVendor_run_info.power_level == 0)
{
Vendor_Main_brake_planel_led(mVendor_run_info.brake_gear_level,mVendor_run_info.work_mode);
update_pwm(0x9c40,0);
}
sdk.config配置
下方还有一个同样的配置,请不要忘了。
研发类型的需求和讨论,如有需要请联系鄙人。京鸿科技有限公司邮箱:zhongweixiong@kyohoon.com,联系电话:15507589165 钟先生