一套可行的PFC力控制实现循环加载方法

一、基本原理

PFC中的计算元素包括ball、clump、wall,其中ball和clump是参与力学计算的,也就是说可以由接触力来计算其速度位移。但wall是不可以进行力学计算的,只能使用位移进行控制,我们当然可以通过伺服原理来实现位移和力的相互转化,但是使用wall直接进行力加载始终有些不顺畅,原因在于力的传递需要时间,而伺服原理根本而言给的是试样内部的力,而不是边界的力,这个和现实的加载又有些出入。并且利用伺服实现力的加载,对伺服系数敏感度较高,有可能会出现力的波动情况。

clump是PFC内置的可以模拟不规则形状的单元,其力学原理和ball一样,只是形状不是圆形而已。这里便采用矩形的clump来模拟加载板,这样和实际也可以对的上。当然模拟也可以高出现实,在于我们可以设置加载板间是可以没有力的,这样便可以实现加载板的互相穿透,摆脱了现实真三轴试验的仪器限制。最终的加载板如图所示,加载板中的pebble数量一共800个,相对于模拟的上万颗粒数而言不算很多了,所以对计算效率的影响不会很大。

图1 clump加载板

二、clump实现预压和围压

Clump直接可以施加外力,所以根据尺寸和应力计算出力就可以直接施加在加载板上面了。但是有时候如果应力变化比较大的话,对于散体材料肯定会出现很大的扰动,所以可以运用分级加载来实现应力缓慢的变化。这里采用二次函数实现,如果是指数函数的话可能还有点偏大。

<
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当涉及到编写一套C++平衡控车代码时,需要考虑以下几个方面: 1. 传感器数据获取:平衡控车通常会使用陀螺仪和加速度计等传感器来获取车辆的倾斜角度和加速度等信息。 2. 控算法设计:基于传感器数据,需要设计一个控算法来实现平衡控。常见的算法包括PID控器和模糊控等。 3. 电机控:平衡控车通常会使用电机来实现前后倾斜的控。需要编写代码来控电机的转速和方向。 4. 通信与交互:如果需要与外部设备进行通信或者实现一些交互功能,还需要编写相应的代码来处理通信协议或者用户输入。 下面是一个简单的示例代码,用于实现一个基于PID控的平衡控车: ```cpp #include <iostream> // PID参数 const double Kp = 1.0; const double Ki = 0.5; const double Kd = 0.2; // 目标倾斜角度 const double targetAngle = 0.0; // 传感器数据获取函数 double getSensorData() { // 获取陀螺仪或加速度计数据 // 返回当前倾斜角度 return 0.0; } // 电机控函数 void controlMotor(double speed) { // 控电机转速和方向 std::cout << "Motor speed: " << speed << std::endl; } // PID控函数 void pidControl() { double errorSum = 0.0; double lastError = 0.0; while (true) { // 获取当前倾斜角度 double currentAngle = getSensorData(); // 计算误差 double error = targetAngle - currentAngle; // 计算PID控量 double control = Kp * error + Ki * errorSum + Kd * (error - lastError); // 更新误差累积和和上一次误差 errorSum += error; lastError = error; // 控电机 controlMotor(control); } } int main() { // 启动PID控 pidControl(); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值