/* USER CODE BEGIN 1 */ float temp = 0; uint8_t opecode; float setpoint = 70.0; float Kp = 1.0; float Kd = 0.1; float output = 0.0; float sum_error = 0.0; float sum_previous_error = 0.0; float outcome_error = 0.0; float previous_error = 0.0; float now_error = 0.0; /* USER CODE END 1 */ float error = setpoint - temp; sum_error += error; sum_previous_error += previous_error; outcome_error = sum_error - sum_previous_error; now_error = error - previous_error; output = Kp * error+Kd*outcome_error; if (output > 100) output = 100; else if (output < 0) output = 0; previous_error = error; __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, (uint32_t)output); HAL_Delay(20); 目前的问题是,光照强度在65到70,led的亮度会变化。但在其他的光照强度,led的亮度不会有任何的变化,请你为我解决这一个问题。
时间: 2024-04-08 18:32:44 浏览: 66
根据你提供的代码,我注意到你使用了一个简单的比例-微分控制器(PID)来控制LED的亮度。根据你的描述,LED只有在光照强度在65到70之间时才会有变化,这可能是因为你的代码逻辑存在一些问题。
在你的代码中,你只在光照强度在指定范围内时更新LED的亮度。这意味着当光照强度不在该范围内时,output的值不会被更新,LED的亮度也就不会改变。
为了解决这个问题,你可以调整代码逻辑,使得无论光照强度如何,都能够更新LED的亮度。你可以尝试将LED的亮度控制逻辑放在一个循环中,这样即使光照强度不在指定范围内,也能够持续更新LED的亮度。
另外,你还可以检查一下光照强度的读取是否正确,并确保它的值在正确的范围内。如果光照强度的读取有问题,那么即使控制逻辑是正确的,LED的亮度也不会有变化。
希望这些建议能够帮助你解决问题!如果还有其他疑问,请随时提问。
阅读全文