Faits :
A.
Le 9 mai 2020, A._ a été interpellé par la police cantonale à Yverdon. Il a été soumis à un test de dépistage qui s'est révélé positif au THC. L'intéressé a été amené à l'hôpital pour y subir une prise de sang, une prise d'urine et un examen médical, sur ordre oral du Ministère public central du canton de Vaud. L'intéressé a refusé de se soumettre à la prise de sang. Il a ensuite repris le volant de son véhicule, malgré la saisie de son permis et l'interdiction de conduire qui venait de lui être notifiée. Une instruction pénale a été ouverte pour violations de la LCR et de la LStup ainsi que de l'art. 286 CP. L'ordre oral de prise de sang, de prise d'urine et d'examen de la personne a été confirmé par ordonnance du Ministère public du 11 mai 2020.
B.
Sur recours de A._, la Chambre des recours pénale du Tribunal cantonal vaudois a, par arrêt du 30 juin 2020, annulé l'ordonnance du 11 mai 2020 en tant qu'elle portait sur la prise de sang. Les conditions posées à l'art. 55 al. 2 LCR et 10 ss de l'ordonnance sur le contrôle de la circulation routière (OCCR, RS 741.013) étaient remplies, de sorte que l'ordre de procéder à une prise de sang était justifié. La mesure n'avait toutefois pas été exécutée en raison de l'opposition de l'intéressé, et le Ministère public n'avait pas expliqué en quoi elle pourrait encore avoir une utilité au sens de l'art. 197 CPP. Deux tiers des frais ont été mis à la charge du recourant, le solde étant laissé à la charge de l'Etat.
C.
Agissant par la voie du recours en matière pénale, le Ministère public du canton de Vaud demande au Tribunal fédéral de réformer l'arrêt cantonal en ce sens que le recours cantonal de A._ est rejeté, que l'ordonnance du 11 mai 2020 est confirmée et que les frais, par 880 fr., sont intégralement mis à la charge du recourant.
A._ conclut au rejet du recours et à la réforme de l'arrêt cantonal en ce sens que son recours est admis, que l'ordonnance du 11 mai 2020 est intégralement annulée et que les frais sont entièrement à la charge du Ministère public.
Considérant en droit :
1.
L'arrêt attaqué, relatif à une mesure d'instruction, a été rendu au cours d'une procédure pénale par une autorité statuant en dernière instance cantonale (art. 80 LTF); il est donc susceptible d'un recours en matière pénale au sens des art. 78 ss LTF.
1.1. Le Ministère public, agissant par le Procureur général adjoint (art. 27 al. 2 de la loi vaudoise sur le Ministère public du 19 mai 2009 [RS/VD 173.21]; ATF 142 IV 196 consid. 1 p. 197), a pris part à la procédure devant l'instance précédente au sens de l'art. 81 al. 1 let. a LTF, en tant que plus haute autorité de poursuite pénale du canton (ATF 134 IV 36 consid. 1.3 p. 38). Il dispose d'un intérêt juridique, au sens de l'art. 81 al. 1 let. b ch. 3 LTF, à la réforme de l'arrêt attaqué dans le sens d'une confirmation de l'ordre de prise de sang. Il a ainsi la qualité pour recourir.
1.2. La décision attaquée est une décision incidente qui cause un préjudice irréparable au Ministère public, dans la mesure où l'arrêt attaqué annule l'ordre de prise de sang, ce qui empêche comme on le verra la poursuite du chef de l'infraction de refus de se soumettre à une telle mesure (art. 93 al. 1 let. a LTF; cf. ATF 137 IV 340 consid. 2.3 p. 345; arrêt 1B_481/2012 du 22 janvier 2013 consid. 1.1, non publié in ATF 146 IV 88).
Les autres conditions de recevabilité sont remplies, de sorte qu'il y a lieu d'entrer en matière.
1.3. Dans ses conclusions, l'intimé demande l'annulation totale de l'ordonnance du 11 mai 2020 (soit également en ce qui concerne la prise d'urine et l'examen de la personne), ainsi que la mise de tous les frais judiciaires à la charge du Ministère public. Il conteste en particulier l'utilité d'une prise de sang dès lors que le résultat des autres examens se serait révélé négatif et que les motivations du Ministère public ne seraient pas claires.
Dès lors que la LTF ne connaît pas l'institution du recours joint, la partie intimée qui n'a pas elle-même recouru n'est pas autorisée à proposer, au stade de ses déterminations (art. 102 al. 1 LTF), des modifications de la décision attaquée de plus grande ampleur ou différentes de celles réclamées par la partie recourante (arrêt 1B_474/2019 du 6 mai 2020, consid. 1.3.1 non publié in ATF 146 IV 118; ATF 136 II 508 consid. 1.3 p. 512; BERNARD CORBOZ, in Commentaire de la LTF, 2014, n° 29 et 33 ad art. 102 LTF). L'intimé ne peut donc conclure qu'au rejet du recours et à la confirmation de l'arrêt cantonal.
2.
La cour cantonale a admis le bien-fondé de l'ordre de prise de sang, les conditions des art. 55 al. 2 LCR et 10 ss OCCR étant selon elle réalisées. Elle a toutefois considéré que cette mesure était sans utilité et que la récolte d'urine était suffisante. Le Ministère public relève que l'ordonnance du 11 mai 2020 ne visait qu'à confirmer par écrit l'ordre oral du 9 mai précédent. Indépendamment de la capacité de cette mesure à prouver l'inaptitude à la conduite, son annulation empêcherait une poursuite pour entrave au sens de l'art. 91a LCR.
2.1. La prise de sang fait partie des mesures de contrainte d'examen de la personne au sens de l'art. 251 CPP. Lorsqu'elle est ordonnée en vue d'établir l'incapacité à conduire, elle est soumise aux conditions spécifiques des art. 55 LCR et 12 à 14 OCCR. En vertu de l'art. 55 al. 3 LCR, une prise de sang doit être ordonnée si la personne concernée présente des indices laissant présumer une incapacité de conduire qui n'est pas imputable à l'alcool (let. a), s'oppose ou se dérobe à l'alcootest ou fait en sorte que cette mesure ne puisse atteindre son but (let. b) ou lorsqu'elle exige une analyse de l'alcool dans le sang (let. c; ATF 143 IV 313 consid. 5; cf. ATF 146 IV 88 consid. 1.4 p. 93).
2.2. La cour cantonale a admis que les conditions pour ordonner une prise de sang étaient réalisées dès lors qu'au moment de son interpellation, l'intimé avait les pupilles dilatées, était en possession de 3g de cannabis, et que le test de dépistage salivaire s'était révélé positif au THC. Il existait donc des indices suffisants d'une incapacité de conduire non imputable à l'alcool. Comme le prévoit l'art. 241 al. 1 CPP, les mesures de contrainte telles que fouilles et examens peuvent être ordonnées oralement, mais doivent être confirmées par écrit, dans les règles de l'art. 199 CPP.
2.3. En l'occurrence, la mesure ordonnée oralement le 9 mai 2020 a été confirmée par écrit le surlendemain. Pour juger de son bien-fondé au regard des conditions posées à l'art. 55 LCR, notamment de l'existence d'indices suffisants, il y a lieu de se placer au moment où la mesure est initialement prononcée. Si, comme en l'espèce, la mesure devient par la suite inutile parce qu'elle n'a pas pu être immédiatement exécutée en raison de l'opposition de l'intéressé, cela n'affecte en rien sa licéité. En outre, la poursuite pour infraction à l'art. 91a LCR (entrave aux mesures de constatation de l'incapacité de conduire) suppose qu'une telle mesure a été valablement ordonnée. C'est par conséquent à tort que la cour cantonale a annulé l'ordre de prise de sang au motif que celle-ci n'avait pas été exécutée.
3.
Le recours doit donc être admis; l'arrêt attaqué est réformé en ce sens que le recours formé par A._ est rejeté, l'ordonnance du 11 mai 2020 étant intégralement confirmée; les frais de l'arrêt cantonal, par 880 fr., doivent être mis entièrement à la charge du recourant A._. Conformément à l'art. 66 al. 1 LTF, les frais du présent arrêt sont également mis à la charge de A._. Il n'est pas alloué de dépens (art. 68 al. 3 LTF).
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est admis. L'arrêt attaqué est réformé en ce sens que le recours formé par A._ est rejeté, que l'ordonnance du 11 mai 2020 est confirmée et que les frais d'arrêt, par 880 fr., sont mis à la charge de A._.
2.
Les frais judiciaires, arrêtés à 1'000 fr., sont mis à la charge de l'intimé A._.
3.
Le présent arrêt est communiqué aux parties et au Tribunal cantonal du canton de Vaud, Chambre des recours pénale.
Lausanne, le 18 janvier 2021
Au nom de la Ire Cour de droit public
du Tribunal fédéral suisse
Le Président : Kneubühler
Le Greffier : Kurz