0
本帖最后由 zh***1 于 2017-5-8 06:49 编辑
由于对开发板理解的缘故,造成许多困难。最主要的就是尽管RGBW颜色传感器灵敏度够高,但是在很短的距离之内,或者强光照射之下也在几个CM范围内,无法按照预期的自动跟踪彩色物体的设想开展下去。结果与开发板主管商讨,改变为另一种设计:用RGB采样周围色彩,由RGB灯去照射场景,使最后的场景环境为白色或指定颜色。这也是有很大的难度的。为了简化设置,仅仅验证可行性,采用1路PWM调光来测试和验证可行性。简化的结果是,采用1路PWM信号控制1只红色的LED照射光敏器件,是用红色的LED照射光敏器件使红色的采光亮度在一定的范围之间。计划实验在300-400、400-500、500-600、600-700、700-800、800-900测试。
首先增加以下变量:
static uint8_t dut0;
static uint16_t maxdut=800,mindut=700;
int ddut0;
接着初始化PWM各项数据,创建一个函数static void app_setup_pin(void),初始化PWM的IO口,代码如下:
static void app_setup_pin(void){
//Define PWMs
#define SCT_PWM LPC_SCT
#define SCT_PWM_PIN_OUT1 1//PWM1 P0_12
#define SCT_PWM_PIN_LED 0//COUT0 [index 2] Controls LED
#define SCT_PWM_OUT1 1//Index of OUT PWM1
#define SCT_PWM_LED 1//Index of LED PWM
#define SCT_PWM_RATE 10000//PWM frequency 10 KHz
Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);
#if (defined(BOARD_NXP_LPCXPRESSO_812) || defined(BOARD_LPC812MAX))
//Connect SCT output 0 to LED pin PIO7, SCT output 1 to PIO17
Chip_SWM_MovablePinAssign(SWM_CTOUT_1_O, 6);
Chip_SWM_MovablePinAssign(SWM_CTOUT_0_O, 7);
#elif defined(BOARD_NXP_LPCXPRESSO_824)
//Connect SCT output 0 to LED pin PIO7, SCT output 1 to PIO17
Chip_SWM_MovablePinAssign(SWM_SCT_OUT1_O, 12);
Chip_SWM_MovablePinAssign(SWM_SCT_OUT0_O, 16);
#else
//Configure your own SCT pin muxing here if needed
#warning "No SCT pin muxing defined"
#endif
Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);
}
其次是初始化PWM的周期等,创建函数pwmInit,代码如下:
//PWM Initial
void pwmInit(void){
//Initialize the SCT as PWM and set frequency
Chip_SCTPWM_Init(SCT_PWM);
Chip_SCTPWM_SetRate(SCT_PWM, SCT_PWM_RATE);
//Setup Board specific output pin
app_setup_pin();
//Use SCT0_OUT1 pin
Chip_SCTPWM_SetOutPin(SCT_PWM, SCT_PWM_OUT1, SCT_PWM_PIN_OUT1);
Chip_SCTPWM_SetOutPin(SCT_PWM, SCT_PWM_LED, SCT_PWM_PIN_LED);
//Start with 90% duty cycle
Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_OUT1, Chip_SCTPWM_GetTicksPerCycle(SCT_PWM) / 90);
Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_LED, Chip_SCTPWM_GetTicksPerCycle(SCT_PWM) / 90);
Chip_SCTPWM_Start(SCT_PWM);
}
主函数main前边加上:
Init_I2C_PinMux();
pwmInit();
在while循环体中加入:
if(rgb[0]>maxdut) ddut0 =1;
if(rgb[0]
if((rgb[0]mindut)) ddut0=0;
dut0 +=ddut0;
Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_OUT1, Chip_SCTPWM_GetTicksPerCycle(SCT_PWM)/dut0);
Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_LED, Chip_SCTPWM_GetTicksPerCycle(SCT_PWM)/dut0);
Chip_SCTPWM_Start(SCT_PWM);
if(dut0>40) dut0=39 ;if(dut0<1) ddut0=1;
编译下载后的结果见照片51~57。还有测试2路PWM的波形照片58。
结论:
1. 传感器的测试灵明度够高,但测试范围或说距离比较小[近],并且尽管有30和55度锥形的指向性,但由于距离太近使得初期的自动跟踪运动物体的设想无法实现。具体是:如果增加凸透镜,距离可以远点,但必须采用单色强光照射物体,非光亮的物体的反射要达到50以上的相对变化量需要几十CM以内,并且周围的光线不能太强,否则周围散光影响较大、理想的情况时用强光手电直接照射,响应的距离可以超过数米甚至于十几米[条件限制]。
2. 更改目标之后的设想在1只红色LED近距照射传感器,可以获得较佳的效果,测试在5mm以内可以稳定在一个PWM数值范围——Delta为100亮度差时,否则会有较大的矫正跳跃。
3. 如果是采用3色LED来矫正场景颜色最后稳定在规定的色域内,应该是可行的,但有较大的难度。主要是算法上的考虑将比较困难一些。
最后,感觉传感器的灵明度再高一些,尤其是指向性再好一些,比如达到+-5度椎体,可能在跟踪运动物体上会有好的应用场合。
最后感谢西贡开发板的所有企业网站和网编以及工作人员和网友们。
|
|