基于stm32的循迹小车,PID控制小车的速度的c语言代码
时间: 2024-02-12 13:03:55 浏览: 83
基于stm32的智能循迹小车的设计.doc
2(s)
if target:
t = self.fc1(target_features)
t = self.fc2(t)
if source and target:
return torch.cat((s, t)), source_features, target_features
elif source:
return s, source_features, None好的,以下是一个基于stm32的循迹小车PID控制小车的速度的C语言代码示例。本示例中,假设小车的控制信号为PWM信号,控制电机的转速。
else:
return t, None, target_features
```
在DCNN模型中,我们添加了source和target参数同时,假设小车的传感器数据通过ADC模块读取,误差值为ADC采样值与目标来控制是否需要计算源域数据和目标域数据在特征空间中的距离。在训练函数值的差值。
```c
#include "stm32f10x.h"
#define KP 1.0 // 比例系数中,我们计算了分类损失和MMD损失,并将两者相加作为总的损失进行优化
#define KI 0.1 // 积分系数
#define KD 0.5 // 微分系数
#define INTEGRAL_MAX 1000 // 积分上限
#define INTEGRAL_MIN -1000 // 积分下限
#define。在测试函数中,我们只需要计算分类损失即可。
最后,我们在主函数中添加MMD损 DELTA_T 0.01 // 控制周期
int main(void)
{
// 初始化PWM模块和ADC模块
失:
```python
if __name__ == '__main__':
# Load data
data_path = 'data'
dataset = ' // ...
float error = 0;
float last_error = 0;
float integral = 0;
float derivative =12k_Drive_End_Bearing'
data = pd.read_csv(os.path.join(data_path, dataset + '_DE_time.csv'), header=None 0;
float output = 0;
float target = 0; // 目标值
while(1)
)
label = pd.read_csv(os.path.join(data_path, dataset + '_DE_label.csv'), header=None)
data = np.array(data {
// 读取传感器数据,并计算误差值error
float sensor_value = ADC_GetValue();
error)
label = np.array(label).reshape(-1)
X_train, X_test, y_train, y_test = train_test_split(data = target - sensor_value;
// 计算积分项
integral += error * DELTA_T;
if(integral > INTEGRAL_MAX)
{
integral = INTEGRAL_MAX;
}
else if(integral < INTEGRAL_MIN)
{
, label, test_size=0.2, random_state=42)
train_data = torch.Tensor(X_train).unsqueeze(1)
integral = INTEGRAL_MIN;
}
// 计算微分项
derivative = (error - last_error) / DEL train_labels = torch.LongTensor(y_train)
test_data = torch.Tensor(X_test).unsqueeze(1)
test_labels = torch.LongTA_T;
// 计算输出变量
output = KP * error + KI * integral + KD * derivative;
//Tensor(y_test)
# Define model
model = DCNN().to(device)
# Define optimizer and criterion
criterion 输出控制信号
PWM_SetDutyCycle(output);
// 更新上一次误差值
last_error = error = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# Train and test model
;
// 延时等待下一次控制周期
Delay(DELTA_T);
}
}
```
需要注意的 for epoch in range(1, 21):
train(model, train_loader, optimizer, criterion, epoch)
test(model, test_loader是,本示例中的代码仅供参考,实际应用中需要根据具体情况进行调整和, criterion)
```
现在,我们完成了基于DCNN的滚动轴承故障诊断代码的编写。
阅读全文